
/**
 * 数据集管理
 */
Yacon.data.DataSet = function()
{
	 this.excuteMethod       = "save";
     this.refreshMethod      = "refresh";
    
};

Yacon.data.DataSet.Extend(Yacon.data.CustomDataSet,{
	
	create:function()
	{
	   addDataset(this);
	}, 
	init:function()
	{
		if(this.whereRecord)
			this.whereRecord.free();
	
		if(this.attributes)
			this.attributes.free();
		
		this.clear();
		
		this.clearTableRow();
		
		this.beforeFirst();
	},

	
	/**
	 * 创建一条新记录
	 * @return 新建记录对象
	 */
	createRecord:function(isrepeat)
	{
		this.createPriRecord(isrepeat);
					
		return this.curRecord;	
	},
	
	/**
	*数据集修改一条记录
	*@return 当前记录
	**/
	editRecord:function(record)
	{
		return this.editPriRecord(record);		
	},

	/**
	*数据集删除一条记录
	*@return 当前记录
	**/
	deleteRecord:function(record)
	{
		return this.deletePriRecord(record);
	},
	/**
	*数据集撤销一条记录
	*@return 当前记录
	**/
	cancelRecord:function(record)
	{
		this.cancelPriRecord(record);
	},
	
	/**
	*数据集清空记录集
	**/
	clearRecord:function()
	{
		this.clear();
	},
	/**
	 * 获取数据打包对象
	 */
	getCompact:function()
	{
		if (!this.compact)
		{
			this.compact = new DataCompact();
		}
		return this.compact;
	},
	/**
	 * 赋值后台执行函数名称
	 */
    setExcuteMethod:function(methodName)
	{
		if (methodName && !methodName.isEqual(""))
			this.excuteMethod = methodName;
			
	},
	/**
	 * 赋值后台数据刷新函数名称
	 */
	setRefreshMethod:function(methodName)
	{
		if (methodName && !methodName.isEqual(""))
			this.refreshMethod = methodName;
	},
	/**
	 * 赋值后台执行对象名称
	 */
	setActionName:function(actionName)
	{
		this.getCompact();
		
		if (this.compact != null)
		{
			this.compact.setActionName(actionName)
		}
	},
	/**
	 * 提交已选择数据集合
	 */
	postCheck:function(checkMethod)
	{
		this.getCompact();
		
		return this.compact.switchDate(this,checkMethod);	
	},
	/**
	 * 前后交换数据
	 */
	switchMessage:function(switchMethod)
	{
		this.getCompact();
		
		if (switchMethod && !switchMethod.isEqual(""))
			this.compact.switchDate(this,switchMethod);	
		else
			this.compact.switchDate(this,this.refreshMethod);	
		
		return this.compact.getResult();
	},
	/**
	 * 提交编辑数据
	 */
	post:function(isRefresh)
	{
		if (Yacon.isfireuserEvent(this.getID()+"_beforePost"))
		{
			if (!Yacon.fireUserEvent(this.getID()+"_beforePost",[this]))
				return;
		}
		
		this.isfresh = isRefresh;
		
		this.getCompact();
		
		this.compact.postData(this,this.excuteMethod);	
		
		return this.compact.getResult();
	},
	/**
	 * 提交编辑数据后事务处理
	 */
	afterPost:function()
	{
		if (this.isfresh == false && this.compact.getResult())
		{
			for(var i=0;i < this.getRecordCount();i++)
			{
				this.getRecord(i);
				this.setState("past");
			}
		}			
		/**
		 * 引发外部函数
		 **/
		if (Yacon.isfireuserEvent(this.getID()+"_afterPost"))
			Yacon.fireUserEvent(this.getID()+"_afterPost",[this]);
		
		if(this.isfresh && this.compact.getResult())
			this.refresh();
	},
	/**
	 * 从后台转载和初始化DataSet
	 * @return
	 */
	load:function()
	{
		
		if (Yacon.isfireuserEvent(this.getID()+"_beforeLoad"))
		{
			if (!Yacon.fireUserEvent(this.getID()+"_beforeLoad",[this]))
				return;
		}
		
		this.getCompact();
			
		this.compact.loadDate(this,this.refreshMethod);
	},
	/**
	 * 数据集装载后事件触发
	*/
	afterLoad:function()
	{
		if (Yacon.isfireuserEvent(this.getID()+"_afterLoad"))
			Yacon.fireUserEvent(this.getID()+"_afterLoad",[this]);
		
		if (!Yacon.isEmpty(this.AfterPostMethod))
			this.AfterPostMethod(this);
		
	},
	/**
	 * 数据集内部刷新记录
	*/
	refresh:function()
	{
		if (Yacon.isfireuserEvent(this.getID()+"_beforeRefresh"))
		{
			if (!Yacon.fireUserEvent(this.getID()+"_beforeRefresh",[this]))
				return;
		}
		this.getCompact();
			
		this.compact.refreshData(this,this.refreshMethod);
	},
	/**
	 * 数据集内部刷新记录
	*/
	afterRefresh:function()
	{
		
		if (Yacon.isfireuserEvent(this.getID()+"_afterRefresh"))
			Yacon.fireUserEvent(this.getID()+"_afterRefresh",[this]);
		
		
		if (this.tableList)
		{
			for(var i = this.tableList.size()-1;i>-1;i--)
			{
				this.tableList[i].afterRefresh();
			}	
		}	
		
		if (!Yacon.isEmpty(this.afterRefreshMethod))
			this.afterRefreshMethod(this);
	},
	/**
	 *刷新后外部处理函数
	 */
	setAfterRefresh:function(afterRefresh)
	{
		this.afterRefreshMethod = afterRefresh;
	},
	/**
	 *执行操作后外部处理函数
	 */
	setAfterPost:function(afterPost)
	{
		this.AfterPostMethod = afterPost;
	},
	/**
	 * 获取从后台返回的数据信息
	 */
	getDataValue:function()
	{
		if (this.compact)
		{
			return this.compact.getDataValue();
		}else{
			return "";
		}
	},
	/**
	 * 从后台获取数据格式
	 */
	getResultType:function()
	{
		if (this.compact)
		{
			return this.compact.getResultType();
		}else{
			return "";
		}
	},
	getResult:function()
	{
		if (this.compact)
		{
			return this.compact.getResult();
		}else{
			return "";
		}
	}
	
});

